iT邦幫忙

2022 iThome 鐵人賽

DAY 22
1
DevOps

30天準備CKA考試系列 第 22

Day 22:建立Highly Available集群 (1)

  • 分享至 

  • xImage
  •  

Wiki中提到,所謂HA(Highly Available)就是指系統無中斷的執行其功能的能力,通常是透過提高系統的容錯能力來實現。

HA的Kubernetes集群就是指當我們的Master Node故障時,系統依然正常運作。而我們提高容錯能力的方式就是增加更多的Master Node,這邊是基於kubeadm來建立,所以也是以on Premise環境為主。

RAFT

這是一種共識演算法,Server會分為三種角色:

  • Leader
  • Follower
  • Candidate

正常情況下只會有一個Leader,其他都是Follower,由Leader來決定集群中的各種大小事。

而Leader是透過選舉來決定,有效票的數量必須大於等於N/2 + 1,也就是3台Server中,至少要2台是正常運作的。

RAFT就是etcd集群決定Leader的做法,所以我們最多只能允許小於一半的Server是故障的,而Server的數量最好要是偶數。

etcd

建立HA的Kubernetes集群有兩種etcd的結構:

  • Stacked:etcd作為集群中的元件存在於各個Master Node,較為簡單,使用上會和單一Master Node相似。
  • External:etcd在外部組成etcd集群來和API Server互動,當擁有大量Node的集群會比較推薦這種結構。

無論是哪種結構,因為RAFT演算法的關係,奇數個Node會有較佳的效果。

Load Balancer

我們增加了更多的Master Node後,當一個Request進來,要如何知道要送去哪個Master Node上的API Server呢?這時候我們需要的是LoadBalancer來根據當前的狀態決定哪個Master Node比較適合,這個LoadBalancer沒有限制,推薦使用HAProxy或是Nginx。

我們接下來需要做的是:

  • 建立一個叫做kube-apiserver的LoadBalancer來解析DNS。

    • 它要可以和所有Control Plane Node的API Server溝通,並且允許監聽這些Endpoint的入站流量
    • 它的Endpoint要與kubeadm建立集群的ControlPlaneEndpoint相匹配。
  • 將一個Control Plane Node加入Load Balancer並測試。

    nc -v LOAD_BALANCER_IP PORT
    
    • 因為集群尚未建立,所以沒有API Server,這時候出現錯誤是正常的。若是出現Timeout,則代表無法和Control Plane Node通信,所以需要重新調整。
  • 將剩下的Control Plane Node加入Load Balancer。

參考資料

利用 kubeadm 创建高可用集群

Raft 协议学习


上一篇
Day 21:使用kubeadm建立集群
下一篇
Day 23:建立Highly Available集群 (2)
系列文
30天準備CKA考試30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言